/*
 * commons is a based project implemented
 * Copyright (C) 2024 Jasmine
 */
package com.easy.database.base;

import java.io.Serializable;
import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.easy.core.domain.dto.BaseDTO;
import com.github.pagehelper.PageInfo;

/**
 * 基础Service
 * 
 * @param <T> 实体类
 * @param <D> 查询条件
 * @param <V> 详情信息
 * @author Jasmine
 * @since 1.0.0
 */
public interface BaseService<T, D extends BaseDTO, V> {
    QueryWrapper<T> getWrapper();

    /**
     * 插入一条记录（选择字段，策略插入）
     *
     * @param modelDTO DTO对象
     */
    int add(D modelDTO);

    /**
     * 根据 ID 查询
     *
     * @param id 主键ID
     */
    V get(Serializable id);

    /**
     * 列表查询
     *
     * @param modelDTO 实体对象封装类
     */
    List<V> list(D modelDTO);

    /**
     * 列表查询
     */
    default List<V> list() {
        return list(null);
    }

    /**
     * 分页查询
     *
     * @param modelDTO 实体对象封装类
     */
    PageInfo<V> page(D modelDTO);

    /**
     * 插入一条记录（选择字段，策略插入）
     *
     * @param modelDTO DTO对象
     */
    boolean update(D modelDTO);

    /**
     * 删除一条记录
     *
     * @param id ID主键
     */
    boolean delete(Serializable id);

    /**
     * 批量添加
     *
     * @param dtoList
     * @return
     */
    boolean saveBatch(List<D> dtoList);
}
